package nio.communication;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

/**
 * NIO 非阻塞 网络编程快速入门
 * 客户端
 *
 * @author chenyuan
 * @date 2020/11/4 9:58
 */
public class NIOClient {
	public static void main(String[] args) throws IOException {
		// 得到一个网络通道
		SocketChannel socketChannel = SocketChannel.open();
		// 设置非阻塞
		socketChannel.configureBlocking(false);
		// 提供服务端的 ip、 端口
		InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 6666);
		// 连接服务端
		if (!socketChannel.connect(inetSocketAddress)) {
			// 如果没有完成
			while (!socketChannel.finishConnect()) {
				System.out.println("连接中……因为连接需要时间，客户端不会阻塞，可以做其他工作");
			}
		}
		// 如果连接成功就发送数据
		String str = "Hello,NIO";
		// wrap 通过参数中的字节数组的大小，直接生成对应大小的 Buffer，并把字节数组存入
		ByteBuffer byteBuffer = ByteBuffer.wrap(str.getBytes());
		// 发送数据， 把 Buffer 中的数据写入 Channel
		socketChannel.write(byteBuffer);
	}
}
